import Vue from 'vue';
import router from '@/router';
import store from '@/store';

/**
 * 获取uuid
 */
export function getUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    return (c === 'x' ? (Math.random() * 16) | 0 : 'r&0x3' | '0x8').toString(
      16
    );
  });
}

/**
 * 是否有权限
 * @param {*} key
 */
export function isAuth(key) {
  return true;
  // return JSON.parse(sessionStorage.getItem('permissions') || '[]').indexOf(key) !== -1 || false
}

/**
 * 是否按钮有权限
 * @param {*} key
 */
export function isButtonAuth(key) {
  return (
    JSON.parse(localStorage.getItem('permissions') || '[]').indexOf(key) !==
      -1 || false
  );
}

/**
 * 树形数据转换
 * @param {*} data
 * @param {*} id
 * @param {*} pid
 */
export function treeDataTranslate(data, id = 'id', pid = 'parentId') {
  var res = [];
  var temp = {};
  for (var i = 0; i < data.length; i++) {
    temp[data[i][id]] = data[i];
  }
  for (var k = 0; k < data.length; k++) {
    if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {
      if (!temp[data[k][pid]]['children']) {
        temp[data[k][pid]]['children'] = [];
      }
      if (!temp[data[k][pid]]['_level']) {
        temp[data[k][pid]]['_level'] = 1;
      }
      data[k]['_level'] = temp[data[k][pid]]._level + 1;
      temp[data[k][pid]]['children'].push(data[k]);
    } else {
      res.push(data[k]);
    }
  }
  return res;
}

/**
 * 清除登录信息
 */
export function clearLoginInfo() {
  Vue.cookie.delete('token');
  Vue.cookie.delete('sys_user_id');
  store.commit('resetStore');
  router.options.isAddDynamicMenuRoutes = false;
}

// 格式化json format(json,false）
export function format(txt, compress) {
  var indentChar = '    ';
  if (/^\s*$/.test(txt)) {
    console.log('数据为空,无法格式化! ');
    return;
  }
  try {
    var data = eval('(' + txt + ')');
  } catch (e) {
    console.log('数据源语法错误,格式化失败! 错误信息: ' + e.description, 'err');
    return;
  }
  var draw = [],
    line = compress ? '' : '\n',
    nodeCount = 0,
    maxDepth = 0;

  var notify = function(name, value, isLast, indent, formObj) {
    nodeCount++; /* 节点计数 */
    for (var i = 0, tab = ''; i < indent; i++) {
      tab += indentChar;
    } /* 缩进HTML */
    tab = compress ? '' : tab; /* 压缩模式忽略缩进 */
    maxDepth = ++indent; /* 缩进递增并记录 */
    if (value && value.constructor == Array) {
      /* 处理数组 */
      draw.push(
        tab + (formObj ? '"' + name + '":' : '') + '[' + line
      ); /* 缩进'[' 然后换行 */
      for (var i = 0; i < value.length; i++) {
        notify(i, value[i], i == value.length - 1, indent, false);
      }
      draw.push(
        tab + ']' + (isLast ? line : ',' + line)
      ); /* 缩进']'换行,若非尾元素则添加逗号 */
    } else if (value && typeof value === 'object') {
      /* 处理对象 */
      draw.push(
        tab + (formObj ? '"' + name + '":' : '') + '{' + line
      ); /* 缩进'{' 然后换行 */
      var len = 0,
        i = 0;
      for (var key in value) {
        len++;
      }
      for (var key in value) {
        notify(key, value[key], ++i == len, indent, true);
      }
      draw.push(
        tab + '}' + (isLast ? line : ',' + line)
      ); /* 缩进'}'换行,若非尾元素则添加逗号 */
    } else {
      if (typeof value === 'string') value = '"' + value + '"';
      draw.push(
        tab +
          (formObj ? '"' + name + '":' : '') +
          value +
          (isLast ? '' : ',') +
          line
      );
    }
  };
  var isLast = true,
    indent = 0;
  notify('', data, isLast, indent, false);
  return draw.join('');
}
